package admin

import (
	"errors"
	"gitee.com/gopher2011/gin"
	"gitee.com/gopher2011/mall/app/dao"
	"gitee.com/gopher2011/mall/app/service"
	"net/http"
	"strconv"
)

// umsAdminApi 管理对象。
var UmsAdmin = &umsAdminApi{}

type umsAdminApi struct{}

// 后台用户注册 /admin
func (it *umsAdminApi) Register(r *gin.Context) {
	// 将请求参数解析到 ptr上
	var ptr dao.UmsAdmin
	err := r.Parse(&ptr)
	if err != nil {
		r.JSON(http.StatusBadRequest, gin.H{"msg": err.Error()})
		r.Abort()
	}
	res, err := service.UmsAdmin.Register(ptr)
	if err != nil {
		r.JSON(http.StatusBadRequest, gin.H{"msg": err.Error()})
		r.Abort()
	} else {
		r.JSON(http.StatusOK, gin.H{"msg": "注册成功!", "data": res})
	}
}

//// 登陆以后返回 token /login
//func (it *umsAdminApi) Login(r *gin.Context) {
//	var l dao.UmsJWTParma
//	err := r.Parse(&l)
//	if err != nil {
//		r.JSON(http.StatusBadRequest, gin.H{"msg": err.Error()})
//		r.Abort()
//	}
//	res, err := service.UmsAdmin.Login(&l)
//	if err != nil {
//		r.JSON(http.StatusBadRequest, gin.H{"msg": err.Error()})
//		r.Abort()
//	} else {
//		token, _ := middleware.GenerateToken(&l)
//		r.JSON(http.StatusOK, gin.H{"msg": "登陆成功!", "data": res, "token": token})
//	}
//}

// 获取当前登录用户信息 /info  参数:username
func (it *umsAdminApi) GetAdminInfo(r *gin.Context) {
	name := r.Query("username")
	info, err := service.UmsAdmin.GetAdminInfo(name)
	if err != nil {
		r.JSON(http.StatusBadRequest, gin.H{"msg": err.Error()})
		r.Abort()
	} else {
		r.JSON(http.StatusOK, gin.H{"msg": "获取当前登录用户信息成功", "data": info})
	}
}

// 根据用户名或姓名分页获取用户列表 /list Get 参数:dao.UmsAdminList
func (it *umsAdminApi) List(r *gin.Context) {
	var l dao.UmsAdminList
	r.Parse(&l)
	list, err := service.UmsAdmin.List(l)
	if err != nil {
		r.JSON(400, gin.H{"msg": "获取用户列表失败"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "获取用户列表成功", "data": list})
	}
}

// 获取指定用户信息 /:id Get 参数:id
func (it *umsAdminApi) GetItem(r *gin.Context) {
	idStr := r.Param("id")
	id, _ := strconv.Atoi(idStr)
	item, err := service.UmsAdmin.GetItem(int64(id))
	if err != nil && item.Id < 0 {
		r.JSON(400, gin.H{"msg": "获取指定用户信息失败"})
		r.Abort()
	}
	r.JSON(200, gin.H{"msg": "获取指定用户信息成功", "data": item})
}

// 修改指定用户信息 /update/:id 参数: id,dao.UmsAdmin
func (it *umsAdminApi) Update(r *gin.Context) {
	idStr := r.Param("id")
	id, _ := strconv.Atoi(idStr)
	var l dao.UmsAdmin
	err := r.Parse(&l)
	if err != nil {
		r.JSON(400, gin.H{"msg": err.Error()})
		r.Abort()
	}
	count, err := service.UmsAdmin.Update(int64(id), l)
	if err != nil {
		r.JSON(400, gin.H{"msg": err.Error()})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "修改指定用户信息成功", "data": count})
	}
}

// 修改帐号状态  /updateStatus/:id Post 参数: id,status
func (it *umsAdminApi) UpdateStatus(r *gin.Context) {
	idStr := r.Param("id")
	id, _ := strconv.Atoi(idStr)
	form := r.PostForm("status")
	status, _ := strconv.Atoi(form)
	res, err := service.UmsAdmin.UpdateStatus(int64(id), int64(status))
	if err != nil {
		r.JSON(400, gin.H{"msg": "修改指定用户帐号状态失败!"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "修改指定用户帐号状态成功", "data": res})
	}
}

// 给用户分配角色 /role/update Post 参数:dao.UmsAdminUpdateRole
func (it *umsAdminApi) UpdateRole(r *gin.Context) {
	var l dao.UmsAdminUpdateRole
	r.Parse(&l)
	_, err := service.UmsAdmin.UpdateRole(l)
	if err != nil {
		r.JSON(400, gin.H{"msg": err.Error()})
		r.Abort()
	}
	r.JSON(200, gin.H{"msg": "给用户分配角色成功"})
}

// 修改指定用户密码 /updatePassword Post 参数:dao.UpdateAdminPasswordParam
func (it *umsAdminApi) UpdatePassword(r *gin.Context) {
	var l dao.UpdateAdminPasswordParam
	r.Parse(&l)
	res, err := service.UmsAdmin.UpdatePassword(l)
	if err != nil {
		r.JSON(400, gin.H{"msg": err.Error()})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "修改用户密码成功", "data": res})
	}
}

// 删除指定用户信息 /delete/:id(物理删除) 参数: id
func (it *umsAdminApi) Delete(r *gin.Context) {
	id := r.Param("id")
	atoi, _ := strconv.Atoi(id)
	i, err := service.UmsAdmin.Delete(atoi)
	if err != nil {
		r.JSON(400, gin.H{"msg": errors.New(" 删除指定用户信息失败!")})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "删除指定用户信息成功", "data": i})
	}
}

// 获取指定用户的角色 /role/:adminId Get 参数: admin_id
func (it *umsAdminApi) GetRoleList(r *gin.Context) {
	adminId := r.Param("admin_id") // Postman传来的只能是字符串。
	atoi, _ := strconv.Atoi(adminId)
	list, err := service.UmsAdmin.GetRoleList(int64(atoi))
	if err != nil {
		r.JSON(400, gin.H{"msg": errors.New(" 获取指定用户的角色失败!")})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "获取指定用户的角色成功", "data": list})
	}
}

// 对象存储管理 /aliyun/oss
type Oss string

// oss上传签名生成 /policy Get
func (it *Oss) Policy(r *gin.Context) {

}

// oss上传成功回调 /callback Post
func (it *Oss) Callback(r *gin.Context) {

}
